package com.esir.android.base;

import android.os.Bundle;
import android.view.View;
import android.widget.Toolbar;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;

import com.esir.android.R;
import com.esir.android.bus.BusUtils;

import org.greenrobot.eventbus.EventBus;

import butterknife.ButterKnife;
import butterknife.Unbinder;


/**
 * 基础Fragment；继承Android 平台 Fragment
 *
 * @author 黄嵘才(HuangRc)
 */
public abstract class BaseFragment extends Fragment {
    /**
     * 日志标签，其值是实例类的类名称
     */
    public final String TAG = this.getClass().getSimpleName();

    private Toolbar toolbar;

    private Unbinder unBinder;

    /**
     * 初始化UI的View
     *
     * @param view 已创建好的View
     */
    protected abstract void initView(View view);

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        initView(view);
        setupToolbar(view);
        unBinder = ButterKnife.bind(this, view);
        if (regEvent()) {
            BusUtils.register(this);
        }
    }

    @Override
    public void onResume() {
        super.onResume();
        // onResume并不代表fragment可见
        // 如果是在viewpager里，就需要判断getUserVisibleHint，不在viewpager时，getUserVisibleHint默认为true
        // 如果是其它情况，就通过isHidden判断，因为show/hide时会改变isHidden的状态
        // 所以，只有当fragment原来是可见状态时，进入onResume就回调onVisible
        if (getUserVisibleHint() && !isHidden()) {
            onVisible();
        }
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        if (unBinder != null) {
            unBinder.unbind();
        }
        if (regEvent()) {
            BusUtils.unregister(this);
        }
    }

    /**
     * 需要接收事件(默认false) 子类可重写该方法 并返回true
     */
    protected boolean regEvent() {
        return false;
    }

    /**
     * 显示（页显在用户面前时回调此法）
     */
    protected void onVisible() {

    }

    /**
     * 初始化Toolbar
     */
    private void setupToolbar(View view) {
        if (toolbar == null) {
            //findView
            toolbar = view.findViewById(R.id.toolbar);
            if (toolbar != null) {
                //setupView
            }
        }
    }

    /**
     * 返回设置的Toolbar
     *
     * @return Toolbar
     */
    public Toolbar getToolbar() {
        return toolbar;
    }


}
